/**
 * 工单列表获取失败诊断工具
 * 在浏览器控制台运行此脚本进行诊断
 */

async function diagnoseTicketsIssue() {
  console.log('🔍 开始诊断工单列表获取问题...\n')
  
  const diagnostics = {
    config: {},
    auth: {},
    network: {},
    response: {}
  }
  
  // 1. 检查配置
  console.log('1️⃣ 检查配置...')
  try {
    const config = await import('./src/config/index.js')
    diagnostics.config.API_BASE_URL = config.config.API_BASE_URL
    diagnostics.config.API_TIMEOUT = config.config.API_TIMEOUT
    console.log('✅ API配置:', diagnostics.config)
  } catch (error) {
    console.error('❌ 配置检查失败:', error)
  }
  
  // 2. 检查认证token
  console.log('\n2️⃣ 检查认证状态...')
  const token = localStorage.getItem('token')
  const userInfo = localStorage.getItem('user_info')
  diagnostics.auth.hasToken = !!token
  diagnostics.auth.tokenLength = token ? token.length : 0
  diagnostics.auth.hasUserInfo = !!userInfo
  
  if (token) {
    console.log('✅ Token存在，长度:', token.length)
    // 尝试解析token（JWT通常有三部分）
    const tokenParts = token.split('.')
    diagnostics.auth.tokenParts = tokenParts.length
    if (tokenParts.length === 3) {
      try {
        const payload = JSON.parse(atob(tokenParts[1]))
        diagnostics.auth.tokenPayload = {
          exp: payload.exp,
          expDate: payload.exp ? new Date(payload.exp * 1000).toLocaleString() : null,
          username: payload.sub || payload.username,
          roles: payload.roles || payload.authorities
        }
        console.log('✅ Token有效，用户:', diagnostics.auth.tokenPayload.username)
        console.log('✅ Token过期时间:', diagnostics.auth.tokenPayload.expDate)
        
        // 检查token是否过期
        if (payload.exp && payload.exp * 1000 < Date.now()) {
          console.warn('⚠️ Token已过期！')
          diagnostics.auth.tokenExpired = true
        }
      } catch (e) {
        console.warn('⚠️ Token解析失败:', e)
      }
    }
  } else {
    console.error('❌ 未找到Token，请先登录！')
  }
  
  if (userInfo) {
    try {
      const user = JSON.parse(userInfo)
      console.log('✅ 用户信息:', user)
      diagnostics.auth.userInfo = user
    } catch (e) {
      console.warn('⚠️ 用户信息解析失败')
    }
  }
  
  // 3. 测试网络请求
  console.log('\n3️⃣ 测试网络请求...')
  try {
    const axios = (await import('axios')).default
    const config = await import('./src/config/index.js')
    
    const testUrl = `${config.config.API_BASE_URL}/tickets?page=0&size=10`
    console.log('📤 测试请求URL:', testUrl)
    
    const headers = {
      'Content-Type': 'application/json'
    }
    
    if (token) {
      headers['Authorization'] = `Bearer ${token}`
    }
    
    const startTime = Date.now()
    try {
      const response = await axios.get(testUrl, {
        headers,
        timeout: config.config.API_TIMEOUT
      })
      const endTime = Date.now()
      
      diagnostics.network.status = response.status
      diagnostics.network.statusText = response.statusText
      diagnostics.network.responseTime = endTime - startTime
      diagnostics.network.responseType = typeof response.data
      diagnostics.network.hasSuccess = response.data?.success
      diagnostics.network.hasData = !!response.data?.data
      diagnostics.network.responseKeys = response.data ? Object.keys(response.data) : []
      
      console.log('✅ 请求成功！')
      console.log('✅ 响应状态:', response.status, response.statusText)
      console.log('✅ 响应时间:', diagnostics.network.responseTime + 'ms')
      console.log('✅ 响应数据:', response.data)
      
      if (response.data?.success) {
        const data = response.data.data
        if (data?.content) {
          console.log('✅ 工单数量:', data.content.length)
          console.log('✅ 总数:', data.totalElements)
          diagnostics.response.ticketCount = data.content.length
          diagnostics.response.totalElements = data.totalElements
        } else {
          console.warn('⚠️ 响应中没有content字段')
        }
      } else {
        console.warn('⚠️ 响应success字段为false')
        if (response.data?.message) {
          console.warn('⚠️ 错误消息:', response.data.message)
        }
      }
    } catch (error) {
      const endTime = Date.now()
      diagnostics.network.error = true
      diagnostics.network.errorMessage = error.message
      diagnostics.network.responseTime = endTime - startTime
      
      if (error.response) {
        diagnostics.network.status = error.response.status
        diagnostics.network.statusText = error.response.statusText
        diagnostics.network.responseData = error.response.data
        console.error('❌ 请求失败！')
        console.error('❌ HTTP状态:', error.response.status, error.response.statusText)
        console.error('❌ 响应数据:', error.response.data)
        
        if (error.response.status === 401) {
          console.error('❌ 认证失败！Token可能无效或已过期')
        } else if (error.response.status === 403) {
          console.error('❌ 权限不足！当前用户可能没有访问工单列表的权限')
        } else if (error.response.status === 400) {
          console.error('❌ 请求参数错误！')
        } else if (error.response.status === 500) {
          console.error('❌ 服务器内部错误！')
        }
      } else if (error.request) {
        console.error('❌ 请求已发送但未收到响应')
        console.error('❌ 可能的原因:')
        console.error('   1. 后端服务未启动')
        console.error('   2. 网络连接问题')
        console.error('   3. CORS跨域问题')
        console.error('   4. 防火墙阻止')
      } else {
        console.error('❌ 请求配置错误:', error.message)
      }
    }
  } catch (error) {
    console.error('❌ 网络测试失败:', error)
  }
  
  // 4. 总结诊断结果
  console.log('\n📊 诊断总结:')
  console.log('=====================================')
  console.log(JSON.stringify(diagnostics, null, 2))
  console.log('=====================================')
  
  // 5. 提供解决建议
  console.log('\n💡 解决建议:')
  
  if (!diagnostics.auth.hasToken) {
    console.log('1. ❌ 未找到Token → 请先登录系统')
  } else if (diagnostics.auth.tokenExpired) {
    console.log('2. ❌ Token已过期 → 请重新登录')
  }
  
  if (diagnostics.network.error) {
    if (diagnostics.network.status === 401) {
      console.log('3. ❌ 认证失败 → 请检查Token是否正确，或重新登录')
    } else if (diagnostics.network.status === 403) {
      console.log('4. ❌ 权限不足 → 请检查当前用户角色是否有访问工单列表的权限')
    } else if (diagnostics.network.status === 400) {
      console.log('5. ❌ 请求参数错误 → 请检查请求参数格式')
    } else if (!diagnostics.network.status) {
      console.log('6. ❌ 无法连接到后端 → 请确认:')
      console.log('   - 后端服务是否正在运行？')
      console.log('   - API地址是否正确？', diagnostics.config.API_BASE_URL)
      console.log('   - 网络连接是否正常？')
    }
  } else if (diagnostics.network.hasSuccess && !diagnostics.network.hasData) {
    console.log('7. ⚠️ 响应格式异常 → 后端返回的数据结构可能不符合预期')
  } else if (diagnostics.network.hasSuccess && diagnostics.response.ticketCount === 0) {
    console.log('8. ℹ️ 数据库中没有工单数据 → 这是正常的，可以创建第一个工单')
  }
  
  return diagnostics
}

// 如果在浏览器环境中，自动运行
if (typeof window !== 'undefined') {
  window.diagnoseTicketsIssue = diagnoseTicketsIssue
  console.log('💡 诊断工具已加载！')
  console.log('💡 在控制台运行: diagnoseTicketsIssue()')
}

export default diagnoseTicketsIssue

